package com.xunmeng.chapter1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

/**
 * 多个通道之间的数据传输
 */
public class TestFileChannelTransferTo {

    public static void main(String[] args) {
        try(FileChannel inputChannel=new FileInputStream(new File(System.getProperty("user.dir"),"from.txt")).getChannel();
            FileChannel outChannel=new FileOutputStream(new File(System.getProperty("user.dir"),"to.txt")).getChannel();) {

//            // 效率高，底层都会使用操作系统的0拷贝进行优化
//            inputChannel.transferTo(0,inputChannel.size(),outChannel);

            // 如果文件大于2g的数据，一下子是传不了的，因此需要分开传
            long size=inputChannel.size();
            long left=size;//剩余数据
            while (left>0){
                System.out.println("postion:"+(size-left)+" left:"+left);
                left-=inputChannel.transferTo((size-left),left,outChannel);

            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
